home *** CD-ROM | disk | FTP | other *** search
/ C/C++ Users Group Library 1996 July / C-C++ Users Group Library July 1996.iso / vol_300 / 352_01 / textfile.cpp < prev    next >
C/C++ Source or Header  |  1991-04-29  |  2KB  |  84 lines

  1. // TEXTFILE.CPP  --  routines for manipulating small text files.
  2. //
  3. // readASCIIfile ()
  4. //    
  5. //        this routine reads an ASCII file (text mode) into a buffer.
  6. //        the buffer is allocated based on the size of the ASCII file.
  7. //        extra bytes of padding may be specified, and a maximimum size can be set
  8. //        PARMS:    char *dir, char *fn, char *ext - as used by make_fullfilename()
  9. //                int pad = number of extra bytes to add to the end of the buffer
  10. //                            (so you can add more to the file later)
  11. //                NOTE: the buffer is NEVER going to be larger than 32000 bytes.
  12. //                defined in RD_ASCII_MAXBUFFER
  13. //        RETURNS: char *buffer - ptr to the buffer holding the file's contents.
  14. //                                must be freed later.
  15. //                                IF FILE did not exist, buffer[0] = 0.
  16. //
  17. //    writeASCIIfile()
  18. //        this routine writes a buffer to the named ASCII file.
  19. //    editASCIIfile()
  20. //        edit an ASCII file by user.
  21. //        
  22. #include "dblib.h"
  23.  
  24. #define RD_ASCII_MAXBUFFER 32000
  25. char *readASCIIfile ( char *dir, char *fn, char *ext, size_t pad )
  26.     {
  27.     FILE *f;
  28.     char *buffer;
  29.     String *fname = make_fullfilename ( dir, fn, ext );
  30.     
  31.     long fsize = filesize ( *fname );
  32.     
  33.     size_t bsize;    
  34.     
  35.     if ( fsize >0 )
  36.         {
  37.         bsize = (size_t) min ( (fsize+pad+1), RD_ASCII_MAXBUFFER );
  38.         buffer = (char *)wmalloc ( bsize, "rdASCII" );
  39.         memset ( buffer, 0 ,bsize );
  40.         if ( NULL!=(f=fopen ( *fname, "rt")))
  41.             {
  42.             fread ( buffer, bsize, 1, f );
  43.             fclose ( f );
  44.             }    
  45.         }
  46.     else
  47.         {
  48.         buffer = (char*) wmalloc ( pad+1, "rdASCII" );
  49.         buffer[0] =0;
  50.         } 
  51.     
  52.     delete fname;
  53.     return buffer;        // readASCIIfile ()
  54.     }
  55.     
  56. void writeASCIIfile ( char *dir, char *fn, char *ext, char *buffer )
  57.     {
  58.     String *fname = make_fullfilename ( dir, fn, ext );
  59.     FILE *f; 
  60.     if ( NULL!= (f= fopen ( *fname, "wt" ) ))
  61.         {
  62.         fputs ( buffer, f );
  63.         fclose (f);
  64.         }
  65.     delete fname;
  66.     return;                // writeASCIIfile ()
  67.     
  68.     }
  69.  
  70. void editASCIIfile ( char *title, char *dir, char *fn, char *ext, int pad )
  71.     {
  72.     char *buffer = readASCIIfile ( dir, fn, ext, pad );
  73.     
  74.     if ( ESCAPE != wprompts ( "FILE EDIT", title, buffer,
  75.                 min (RD_ASCII_MAXBUFFER, (pad+strlen (buffer)) ) ) )
  76.         {
  77.         writeASCIIfile ( dir,fn,ext,buffer );
  78.         }
  79.         
  80.     free (buffer);
  81.     
  82.     return;    
  83.     }    
  84.